﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace VISTA
{
    public class FormABMBase : FormBase
    {

        public int ID { get; set; }
        public ModoABM Modo { get; set; }

        public FormABMBase()
            : this(ModoABM.Alta, -1)
        {
        }

        public FormABMBase(ModoABM modo, int id)
        {
            this.Modo = modo;
            this.ID = id;
            this.Load += new EventHandler(FormBase_Load);
        }

        void FormBase_Load(object sender, EventArgs e)
        {
            this.InicializarModo();
        }

        protected virtual void InicializarModo()
        {
            this.InicializarControles();

            switch (Modo)
            {
                case ModoABM.Alta:
                    this.CrearEntidad();
                    break;
                case ModoABM.Modificar:
                    this.CargarEntidad();
                    this.DeshabilitarControlesModificacion(this);
                    break;
                case ModoABM.Eliminar:
                case ModoABM.Consultar:
                    this.CargarEntidad();
                    this.DeshabilitarControlesConsulta(this);
                    break;
                default:
                    break;
            }
        }

        protected virtual void CrearEntidad()
        {
        }

        protected virtual void InicializarControles()
        {
        }

        protected virtual void DeshabilitarControlesConsulta(Control controlBase)
        {
            foreach (Control control in controlBase.Controls)
            {
                if (control.Tag != "HABILITACONSULTA")
                {
                    control.Enabled = false;
                }
                else if (control.HasChildren)
                {
                    DeshabilitarControlesConsulta(control);
                }
            }
        }

        protected virtual void DeshabilitarControlesModificacion(Control controlBase)
        {
            foreach (Control control in controlBase.Controls)
            {
                if (control.Tag == "NOMODIFICABLE")
                {
                    control.Enabled = false;
                }
                else if (control.HasChildren)
                {
                    DeshabilitarControlesModificacion(control);
                }
            }
        }

        protected virtual void CargarEntidad()
        {
        }

        protected void EjecutarAccion(AccionABM accionABM)
        {
            if (Modo == ModoABM.Consultar)
            {
                return;
            }
            switch (accionABM)
            {
                case AccionABM.Guardar:
                    this.GuardarEntidad();
                    this.Close();
                    break;
                default:
                    break;
            }
        }

        protected virtual void GuardarEntidad()
        {
        }
    }
}
